Model
public class loginfo
{
public string Account { get; set; }
public string Password { get; set; }
};
Controller
public ActionResult Seeall()
{
//用來存放資料使用的容器
List<loginfo>users = new List<loginfo>();
//SQL連接字串
string connstr = "Data Source=CSIE-TEST2;Initial Catalog=Student_data;User ID=TEST03;Password=*****;Encrypt=False";
SqlConnection conn = new SqlConnection(connstr);
conn.Open();
//SQL語法,我們的目的是抓取Login這張資料表中的所有資料
SqlCommand cmd = new SqlCommand("select * from Login");
cmd.Connection = conn;
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read()) // 逐行讀取查詢結果
{
//創建使用者物件
loginfo user = new loginfo
{
Account = reader["Account"].ToString(), // 資料表中的欄位名是 Username
Password = reader["Password"].ToString() // 資料表中的欄位名是 Password
};
users.Add(user); // 將每一筆資料加入容器
}
ViewBag.users = users;
return View();
}
}
解釋:在上述語法當中前面與資料庫溝通的部分基本不變,只是下SQL語法時必須根據需求來下,中間我們使用的是While迴圈來讀取資料,他會將在資料庫搜尋到的資料一一讀取,每一筆資料都會變成擁有Account、Password兩個屬性的物件並放在list列表當中,ViewBag用於Controller與view的資料傳輸,因此我們就使用ViewBag將資料傳輸至前端
注意事項
1.SQL連接字串中的密碼必須改成自己設置的使用者密碼
2.List在聲明時的語法是List<數值型態> 名稱 = new List<數值型態>(),這邊相當於數值型態是loginfo,如果只想單純放入字串或整數數字也可以這樣寫List<int> num = new List<int>()
3.在While迴圈中創建使用者資料時reader["Account"]裡面的Account必須與資料表中的欄位名稱一模一樣
view
<h2>Seeall</h2>
<!-- 使用我們寫在model資料夾的class -->
@using new_project.Models;
<!-- 接收controller的資料 -->
@{
List<loginfo> users = ViewBag.users;
}
<h2>Login Information</h2>
<table class="table">
<thead>
<tr>
<th>Username</th>
<th>Password</th>
</tr>
</thead>
<tbody>
<!--使用迴圈讀取list中的資料-->
@foreach (loginfo user in users)
{
<tr>
<td>@user.Account</td> <!-- 顯示 Username -->
<td>@user.Password</td> <!-- 顯示 Password -->
</tr>
}
</tbody>
</table>
解釋:因為我們的資料型態是自定義的,所以我們會先引入model內的class,不然編譯器其實不會知道我們傳過來的資料是甚麼型態,之後就接收從controller收到的資料,然後使用"foreach"類似迴圈,將資料逐行讀出後顯示。
總結:我們在資料庫抓取的資料一般會使用自訂義的資料型態(class)相當於我這次案例的loginfo來存放,再利用list存放多筆資料,會使用ViewBag來完成Conntroller與view的資料傳遞,在View中可以使用foreach將資料顯示出來,就可以完成這次的實作了。